//====================================================================================================
// Filename:	EngineMath.cpp
// Created by:	Peter Chan
//====================================================================================================

//====================================================================================================
// Includes
//====================================================================================================

#include "Precompiled.h"

#include "EngineMath.h"

namespace Math
{

//====================================================================================================
// Constants
//====================================================================================================

const f32 kPi			= 3.14159265358979f;
const f32 kTwoPi		= 6.28318530717958f;
const f32 kPiByTwo		= 1.57079632679489f;
const f32 kDegToRad		= kPi / 180.0f;
const f32 kRadToDeg		= 180.0f / kPi;

//====================================================================================================
// Function Definitions
//====================================================================================================

Matrix Matrix::RotationAxis(const Vector3& axis, f32 rad)
{
	const Vector3 u = Normalize(axis);
	const f32 x = u.x;
	const f32 y = u.y;
	const f32 z = u.z;
	const f32 s = sin(rad);
	const f32 c = cos(rad);

	return Matrix
	(
		c + (x * x * (1.0f - c)),
		x * y * (1.0f - c) + z * s,
		x * z * (1.0f - c) - y * s,
		0.0f,

		x * y * (1.0f - c) - z * s,
		c + (y * y * (1.0f - c)),
		y * z * (1.0f - c) + x * s,
		0.0f,

		x * z * (1.0f - c) + y * s,
		y * z * (1.0f - c) - x * s,
		c + (z * z * (1.0f - c)),
		0.0f,

		0.0f,
		0.0f,
		0.0f,
		1.0f
	);
 }

} // namespace Math